﻿using System;
using System.Web;
using System.Web.Services;
using System.Web.Services.Protocols;
using System.ComponentModel;
using System.Collections.Generic;
using System.ComponentModel.DataAnnotations.Schema;
using System.ComponentModel.DataAnnotations;

namespace TP_Final
{
    
    [Table("Empleado")]
    public class Empleado : IComparable
    {
        #region "Atributos"
        private int _idEmpleado;
        string _nombre;
        string _apellido;
        string _dni;
        private eCategoria _categoria;
        private decimal _sueldo;
        private long _cuentaSueldo;
        List<Liquidacion> _misLiquidaciones;
        int _edad;
        DateTime _fechaNacimiento;
        #endregion

        #region "Propiedades"
        [Column("categoria")]
        public eCategoria Categoria
        {
            get { return _categoria; }
            set { _categoria = value; }
        }
        
        [Column("sueldo")]
        public decimal Sueldo
        {
            get { return _sueldo; }
            set { _sueldo = value; }
        }
                
        [Column("id")]
        [Key]
        [DatabaseGeneratedAttribute(DatabaseGeneratedOption.Identity)]
        public int IdEmpleado
        {
            get { return _idEmpleado; }
            set { _idEmpleado = value; }
        }

        [Column("nombre")]
        public string Nombre
        {
            get { return _nombre; }
            set { _nombre = value; }
        }

        [Column("apellido")]
        public string Apellido
        {
            get { return _apellido; }
            set { _apellido = value; }
        }

        [Column("dni")]
        public string Dni
        {
            get { return _dni; }
            set { _dni = value; }
        }

                
        [Column("cuenta_sueldo")]
        public long CuentaSueldo
        {
            get { return _cuentaSueldo; }
            set { _cuentaSueldo = value; }
        }

        [Column("edad")]
        public int Edad
{
  get { return _edad; }
  set { _edad = value; }
}

        [Column("nacimiento")]
        public DateTime FechaNacimiento
{
  get { return _fechaNacimiento; }
  set { _fechaNacimiento = value; }
}
        public List<Liquidacion> MisLiquidaciones
        {
            get { return _misLiquidaciones; }
            set { _misLiquidaciones = value; }
        }
        #endregion
        
        #region "Metodos"

        public Empleado() { }

        public Empleado(string nombre, string apellido, string dni, eCategoria categoria, long cuenta, DateTime nacimiento)
        {

            this._nombre = nombre;
            this._apellido = apellido;
            this._dni = dni;
            this._categoria = categoria;           
            this._cuentaSueldo = cuenta;
            this._edad = DateTime.Now.Year - nacimiento.Year;
            if (DateTime.Now.Month < nacimiento.Month || DateTime.Now.Month == nacimiento.Month && DateTime.Now.Day < nacimiento.Day)
                this._edad--;
        }
        
        public int CompareTo(object obj)
        {
            Empleado e = (Empleado)obj;
            int resultado = string.Compare(this._apellido, e._apellido);
            if (resultado == 0)
            {
                resultado = string.Compare(this._nombre, e._nombre);
            }

            return resultado;
        }

        #endregion
    }
}
